package chemtools_logica.LN.SFBean;

import chemtools_logica.BDL.IR.BDL_SFLaboratorioRemote;

import chemtools_logica.BDL.IR.BDL_SFUbigeoRemote;

import chemtools_logica.Beans.LaboratorioBean;

import chemtools_logica.Entidades.Laboratorio;

import chemtools_logica.Entidades.Ubigeo;

import chemtools_logica.LN.IL.LN_SFLaboratorioLocal;
import chemtools_logica.LN.IR.LN_SFLaboratorioRemote;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless(name = "LN_SFLaboratorio", mappedName = "map-LN_SFLaboratorio")
public class LN_SFLaboratorioBean implements LN_SFLaboratorioRemote, LN_SFLaboratorioLocal {
    @Resource
    SessionContext sessionContext;
    @PersistenceContext(unitName = "Chemtools_Logica")
    private EntityManager em;

    @EJB
    private BDL_SFLaboratorioRemote bDL_SFLaboratorioRemote;
    
    @EJB
    private BDL_SFUbigeoRemote bDL_SFUbigeoRemote;

    public List<LaboratorioBean> getAllLaboratoriosActivos() {
        List<Laboratorio> laboratorios = bDL_SFLaboratorioRemote.getLaboratoriosActivos();
        List<LaboratorioBean> beanLaboratorio = new ArrayList<LaboratorioBean>();
        for (Laboratorio entidad : laboratorios) {
            LaboratorioBean bean = new LaboratorioBean();
            bean.setIdLaboratorio(entidad.getIdLaboratorio());
            bean.setNombre(entidad.getNombre());
            beanLaboratorio.add(bean);
        }
        return beanLaboratorio;
    }

    public List<LaboratorioBean> buscarLaboratorios(LaboratorioBean laboratorio) {
        return listaEntidadxBean(bDL_SFLaboratorioRemote.buscaLaboratorios(laboratorio));
    }

    public void registrarLaboratorio(LaboratorioBean laboratorio) {
        bDL_SFLaboratorioRemote.persistLaboratorio(beanxEntidad(laboratorio));
    }

    public void editarLaboratorio(LaboratorioBean laboratorio) {
        bDL_SFLaboratorioRemote.mergeLaboratorio(beanxEntidad(laboratorio));
    }

    private List<LaboratorioBean> listaEntidadxBean(List<Laboratorio> laboratorio) {
        List<LaboratorioBean> lb = new ArrayList<>();
        LaboratorioBean bean;
        List<Ubigeo> u;
        for (Laboratorio l : laboratorio) {
            bean = new LaboratorioBean();
            bean.setIdLaboratorio(l.getIdLaboratorio());
            bean.setNombre(l.getNombre());
            bean.setTelefono(l.getTelefono());
            bean.setDireccion(l.getDireccion());
            bean.setIdDepartamento(l.getIdDepartamento());
            bean.setIdProvicia(l.getIdProvicia());
            bean.setIdDistrito(l.getIdDistrito());
            bean.setNombre_Encargado(l.getNombre_Encargado());
            bean.setEstado(l.getEstado());
            u=bDL_SFUbigeoRemote.getUbigeo(l.getIdDepartamento(), l.getIdProvicia(), l.getIdDistrito());
            bean.setIdDepartamentoNombre(u.get(0).getDepartamento());
            bean.setIdProviciaNombre(u.get(0).getProvincia());
            bean.setIdDistritoNombre(u.get(0).getDistrito());
            lb.add(bean);
        }
        return lb;
    }

    private Laboratorio beanxEntidad(LaboratorioBean laboratorio) {
        Laboratorio entidad = new Laboratorio();
        entidad.setIdLaboratorio(laboratorio.getIdLaboratorio());
        entidad.setNombre(laboratorio.getNombre());
        entidad.setTelefono(laboratorio.getTelefono());
        entidad.setDireccion(laboratorio.getDireccion());
        entidad.setIdDistrito(laboratorio.getIdDistrito());
        entidad.setIdProvicia(laboratorio.getIdProvicia());
        entidad.setIdDepartamento(laboratorio.getIdDepartamento());
        entidad.setNombre_Encargado(laboratorio.getNombre_Encargado());
        entidad.setEstado(laboratorio.getEstado());
        return entidad;
    }
    
    public boolean existeLaboratorio(String nombreLaboratorio){
        return bDL_SFLaboratorioRemote.existeLaboratorio(nombreLaboratorio);
        }
}
